package com.cg.leetcode;

import org.junit.Test;

import java.util.ArrayList;
import java.util.List;

/**
 * 94.二叉树的中序遍历
 *
 * @program: LeetCode->LeetCode_94
 * @description: 94.二叉树的中序遍历
 * @author: cg
 * @create: 2021-09-14 22:13
 **/
public class LeetCode_94 {

    @Test
    public void test94() {
        System.out.println(inorderTraversal(new TreeNode(1, null, new TreeNode(2, new TreeNode(3), null))));
    }

    /**
     * 给定一个二叉树的根节点 root ，返回它的 中序 遍历。
     * <p>
     * 示例 1：
     * 输入：root = [1,null,2,3]
     * 输出：[1,3,2]
     * <p>
     * 示例 2：
     * 输入：root = []
     * 输出：[]
     * <p>
     * 示例 3：
     * 输入：root = [1]
     * 输出：[1]
     * <p>
     * 示例 4：
     * 输入：root = [1,2]
     * 输出：[2,1]
     * <p>
     * 示例 5：
     * 输入：root = [1,null,2]
     * 输出：[1,2]
     * <p>
     * 提示：
     * 1) 树中节点数目在范围 [0, 100] 内
     * 2) -100 <= Node.val <= 100
     * 进阶: 递归算法很简单，你可以通过迭代算法完成吗？
     *
     * @param root
     * @return
     */
    public List<Integer> inorderTraversal(TreeNode root) {
        List<Integer> list = new ArrayList<>();
        inorder(root, list);
        return list;
    }

    private void inorder(TreeNode root, List<Integer> list) {
        if (root == null) {
            return;
        }
        inorder(root.left, list);
        list.add(root.val);
        inorder(root.right, list);
    }
}
